package cn.bearspark.happening.provider.dao.buffer;

import cn.bearspark.framework.redis.starter.buffer.hash.un.RedisHashBuffer;
import cn.bearspark.happening.provider.dao.co.VoteCO;
import cn.bearspark.happening.provider.dao.key.VoteBufferKeyBuilder;
import cn.bearspark.happening.provider.dao.mapper.VoteMapper;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 投票的数据的缓存器
 *
 * @author f
 */
@Component
public class VoteHashBuffer extends RedisHashBuffer<VoteCO> {

    /**
     * 设置投票的数据的缓存的有效期（单位：s），默认是 10min
     */
    private static final int VOTE_INFO_CACHE_EXPIRE = 60 * 10;

    /**
     * 投票简单信息的字段名集合，这些字段名是 VoteCO 中的字段名
     */
    private final List<String> simpleInfoFieldNameList;

    public VoteHashBuffer(RedisTemplate<String, Object> redisTemplate,
                          VoteBufferKeyBuilder voteBufferKeyBuilder,
                          VoteMapper voteMapper) {
        super(
                redisTemplate,
                voteBufferKeyBuilder,
                VOTE_INFO_CACHE_EXPIRE,
                VoteCO.class,
                voteMapper
        );

        this.simpleInfoFieldNameList = List.of("voteId", "title", "voteNum", "deadline");
    }

    /**
     * 获取指定投票的简单信息
     *
     * @param voteIdList 待获取简单信息的投票 id 集合
     * @return 指定投票的简单信息映射，key：投票 id，value：投票的缓存数据 (只有简单数据有值)
     */
    public Map<Long, VoteCO> mapSimple(List<Long> voteIdList) {
        return super.mapLess(voteIdList, simpleInfoFieldNameList);
    }

    /**
     * 获取指定投票的简单信息
     *
     * @param voteId 待获取简单信息的投票 id
     * @return 指定投票的缓存数据 (只有简单数据有值)
     */
    public VoteCO getSimple(long voteId) {
        return super.getLess(voteId, simpleInfoFieldNameList);
    }
}
